﻿//给你一个整数数组 arr 和一个整数 difference，请你找出并返回 arr 中最长等差子序列的长度，
//该子序列中相邻元素之间的差等于 difference 。
//子序列 是指在不改变其余元素顺序的情况下，通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。
//
//
//输入：arr = [1, 2, 3, 4], difference = 1
//输出：4
//解释：最长的等差子序列是[1, 2, 3, 4]。
//
//输入：arr = [1, 3, 5, 7], difference = 1
//输出：1
//解释：最长的等差子序列是任意单个元素。
//
//输入：arr = [1, 5, 7, 8, 5, 3, 4, 2, 1], difference = -2
//输出：4
//解释：最长的等差子序列是[7, 5, 3, 1]。
//
//提示：
//	1 <= arr.length <= 10^5
//	- 104 <= arr[i], difference <= 10^4

class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
        // 创建⼀个哈希表
        unordered_map<int, int> hash; // {arr[i], dp[i]}
        hash[arr[0]] = 1;             // 初始化
        int ret = 1;
        for (int i = 1; i < arr.size(); i++) {
            hash[arr[i]] = hash[arr[i] - difference] + 1;
            ret = max(ret, hash[arr[i]]);
        }
        return ret;
    }
};
